//文件打包工具
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1000
struct Dabao{
    char filename[200];
    long filesize;
};
long Getfilesize(const char*filesize);

int main(int argc,const char * argv[]) {
    // insert code here...
    int num=argc-1;
    int i;
    struct Dabao*p=(struct Dabao*)malloc(sizeof(struct Dabao)*num);
    for(i=0;i<num;i++){
        /*获取每个文件的大小*/
        p[i].filesize=Getfilesize(argv[i+1]);
        /*获取每个文件的名字*/
        strcpy(p[i].filename,argv[i+1]);
        printf("i:%d 文件名 %s 文件大小 %ld\n",i,p[i].filename,p[i].filesize);
    }
    /*创建一个打包后的文件*/
    FILE*fp1;
    fp1=fopen("DaBaoHou","wb");
    if(fp1==NULL)
        return -1;
    /*将文件个数写入*/
    fwrite(&num,1,4,fp1);
    
    /*将文件信息写入*/
    fwrite(p,1,sizeof(struct Dabao)*num,fp1);
    
    
    /*将文件内容写入*/
    FILE*fp2;
    long m;
    char b[N];
    
    for(i=0;i<num;i++){
        fp2=fopen(p[i].filename,"rb");
        while(1){
         m=fread(b,1,N,fp2);
            if(m>0){
                fwrite(b,1,m,fp1);
            }
            else{
                break;
            }
        }
        fclose(fp2);
    }
    
    
    /*关闭*/
    fclose(fp1);
    return 0;
}
long Getfilesize(const char*filesize){
    FILE*fp=fopen(filesize,"r");
    long size;
    if(fp==NULL)
        return -1;
    fseek(fp,0,SEEK_END);
    size=ftell(fp);
    fseek(fp,0,SEEK_SET);
    fclose(fp);
    return size;
}
